package com.imooc.netty.http;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.http.HttpServerCodec;

/**
 * 设定channel的初始化器
 * 在netty服务器server中设置channel后,启动的时候会自动执行下面的初始化方法
 * 泛型SocketChannel理解为是固定的即可
 * @author liansen
 * @create 07-15-0:05
 */
public class HttpServerInitializer extends ChannelInitializer<SocketChannel> {

    @Override
    protected void initChannel(SocketChannel channel) throws Exception {

        //通过SocketChannel获取对应的管道, 所有的助手类都放到pipeline中去
        ChannelPipeline pipeline = channel.pipeline();

        /**
         * 通过管道添加handler
         */
        //HttpServerCodec是netty自己提供的助手类,可以理解为拦截器
        //作用是当请求到netty服务器，需要做解码，响应到客户端做编码
        pipeline.addLast("HttpServerCodec", new HttpServerCodec());

        //添加自定义助手类, 返回"hello netty"
        pipeline.addLast("httpHandler", new HttpHandler());
    }
}
